package com.openlogic.common.logic.func;

import java.util.StringJoiner;

import com.openlogic.common.core.exception.logic.RuleFuncParamNumberIllegalArgument;

/**
* @ClassName: StringFunc
* @Description: 进行String字符串的操作库
* @author weiyongpeng
* @date 2024年7月22日 上午11:55:36
 */
public class StringFunc {

	// 这个类不能实例化
	private StringFunc() {
	}

	/**
	* 描述：字符串拼接函数
	* @Title: concat
	* @param args
	* @return
	* @author weiyongpeng
	* @date  2024年7月22日 下午6:07:12
	 */
	public static String concat(String ... args) {
		StringJoiner joiner = new StringJoiner("");
		for (String string : args) {
			joiner.add(string);
		}
		return joiner.toString();
	}
	
	/**
	* 描述：指定拼接符拼接字符串
	* @Title: concatenat
	* @param speator
	* @param args
	* @return
	* @author weiyongpeng
	* @date  2024年7月22日 下午6:12:25
	 */
	public static String concatenat(String speator, String ... args) {
		StringJoiner joiner = new StringJoiner(speator);
		for (String string : args) {
			joiner.add(string);
		}
		return joiner.toString();
	}

	/**
	* 描述：从一个文本字符串的第一个字符开始返回指定个数的字符
	* @Title: leftStr
	* @param str
	* @param index
	* @return
	* @author weiyongpeng
	* @date  2024年7月22日 下午6:21:07
	 */
	public static String leftStr(String str, int index) {
		if(str.length() <= index) {
			return str;
		}else {
			return str.substring(0,index);
		}
	}
	
	/**
	* 描述：从一个文本字符串的最后一个字符开始返回指定个数的字符
	* @Title: rightStr
	* @param str
	* @param index
	* @return
	* @author weiyongpeng
	* @date  2024年7月22日 下午6:21:07
	 */
	public static String rightStr(String str, int index) {
		if(str.length() <= index) {
			return str;
		}else {
			return str.substring(str.length()-index,str.length());
		}
	}
	
	/**
	* 描述：转小写
	* @Title: lower
	* @param str
	* @return
	* @author weiyongpeng
	* @date  2024年7月22日 下午6:29:39
	 */
	public static String lower(String str) {
		return str.toLowerCase();
	}
	
	/**
	* 描述：转大写
	* @Title: upper
	* @param str
	* @return
	* @author weiyongpeng
	* @date  2024年7月22日 下午6:29:39
	 */
	public static String upper(String str) {
		return str.toUpperCase();
	}
	
	/**
	* 描述：替换函数
	* @Title: replace
	* @param str
	* @return
	* @author weiyongpeng
	* @date  2024年7月22日 下午6:31:02
	 */
	public static String replace(String str, String replaceStr) {
		return str.replaceAll(str, replaceStr);
	}
	
	/**
	* 描述：支持替换指定位置，指定个数的字符
	* @Title: replacePlus
	* @param str
	* @param replaceStr
	* @return
	* @author weiyongpeng
	* @date  2024年7月24日 上午10:03:03
	 */
	public static String replacePlus(String str, int start, int lenght, String replaceStr) {
		StringBuilder stringBuilder = new StringBuilder(str);
		if((start + lenght + 1) > str.length()) {
			throw new RuleFuncParamNumberIllegalArgument("替换位数超过字符串长度");
		}
		StringBuilder replaceBuilder = stringBuilder.replace(start, start + lenght + 1, replaceStr);
		return replaceBuilder.toString();
	}
	
	/**
	* 描述：返回字符串中的字符个数
	* @Title: len
	* @param str
	* @return
	* @author weiyongpeng
	* @date  2024年7月24日 上午10:16:35
	 */
	public static int len(String str) {
		return str.length();
	}
	
	/**
	* 描述：字符串反转
	* @Title: reverse
	* @param str
	* @return
	* @author weiyongpeng
	* @date  2024年7月24日 上午10:20:32
	 */
	public static String reverse(String str) {
		StringBuilder stringBuilder = new StringBuilder(str);
		return stringBuilder.reverse().toString();
	}
	
}